package leetcode.weekly.week296;

import java.util.Stack;

public class TextEditor {

	Stack<Character> head;
	Stack<Character> tail;

	public TextEditor() {
		head = new Stack<>();
		tail = new Stack<>();
	}

	public void addText(String text) {
		for (char c : text.toCharArray()) {
			head.add(c);
		}
	}

	public int deleteText(int k) {
		int ans = 0;
		while (!head.isEmpty() && k > 0) {
			head.pop();
			k--;
			ans++;
		}
		return ans;
	}

	public String cursorLeft(int k) {
		while (!head.isEmpty() && k > 0) {
			tail.add(head.pop());
			k--;
		}
		StringBuffer sb = new StringBuffer();
		int cnt = 10;
		while (!head.isEmpty() && cnt > 0) {
			sb.insert(0, head.pop());
			cnt--;
		}
		this.addText(sb.toString());
		return sb.toString();
	}

	public String cursorRight(int k) {
		while (!tail.isEmpty() && k > 0) {
			head.add(tail.pop());
			k--;
		}
		StringBuffer sb = new StringBuffer();
		int cnt = 10;
		while (!head.isEmpty() && cnt > 0) {
			sb.insert(0, head.pop());
			cnt--;
		}
		this.addText(sb.toString());
		return sb.toString();
	}

	public static void main(String[] args) {
		TextEditor textEditor = new TextEditor(); // 当前 text 为 "|" 。（'|' 字符表示光标）
		textEditor.addText("leetcode"); // 当前文本为 "leetcode|" 。
		textEditor.deleteText(4); // 返回 4
									// 当前文本为 "leet|" 。
									// 删除了 4 个字符。
		textEditor.addText("practice"); // 当前文本为 "leetpractice|" 。
		textEditor.cursorRight(3); // 返回 "etpractice"
									// 当前文本为 "leetpractice|".
									// 光标无法移动到文本以外，所以无法移动。
									// "etpractice" 是光标左边的 10 个字符。
		textEditor.cursorLeft(8); // 返回 "leet"
									// 当前文本为 "leet|practice" 。
									// "leet" 是光标左边的 min(10, 4) = 4 个字符。
		textEditor.deleteText(10); // 返回 4
									// 当前文本为 "|practice" 。
									// 只有 4 个字符被删除了。
		textEditor.cursorLeft(2); // 返回 ""
									// 当前文本为 "|practice" 。
									// 光标无法移动到文本以外，所以无法移动。
									// "" 是光标左边的 min(10, 0) = 0 个字符。
		String ans1 = textEditor.cursorRight(6); // 返回 "practi"
		// 当前文本为 "practi|ce" 。
		// "practi" 是光标左边的 min(10, 6) = 6 个字符。
		System.out.println(ans1);
	}
}
